#include "stdafx.h"
#include "HTTPResponse.h"



struct ResponseCode
{
	int code;
	char phrase[64];
};

ResponseCode g_ResponseCode[] = 
{
	{100, "Coninute"},
	{101, "SwitchingProtocols"},
	{200, "OK"},
	{201, "Created"},
	{202, "Accepted"},
	{203, "Non-Authoritative Information"},
	{204, "No Content"},
	{205, "Reset Content"},
	{206, "Partial Content"},
	{300, "Multiple Choices"},
	{301, "Moved Permanently"},
	{302, "Found"},
	{303, "See Other"},
	{304, "Not Modified"},
	{305, "Use Proxy"},
	{307, "Temporary Redirect"},
	{400, "Bad Request"},
	{401, "Unauthorized"},
	{402, "Payment Required"},
	{403, "Forbidden"},
	{404, "Not Found"},
	{405, "Method Not Allowed"},
	{406, "Not Acceptable"},
	{407, "Proxy Authentication Required"},
	{408, "Request Time-out"},
	{409, "Conflict"},
	{410, "Gone"},
	{411, "Length Required"},
	{412, "Precondition Failed"},
	{413, "Request Entity Too Large"},
	{414, "Request-URI Too Large"},
	{415, "Unsupported Media Type"},
	{416, "Requested range not satisfiable"},
	{417, "Expectation Failed"},
	{500, "Internal Server Error"},
	{501, "Not Implemented"},
	{502, "Bad Gateway"},
	{503, "Service Unavailable"},
	{504, "Gateway Time-out"},
	{505, "HTTP Version not supported"}
};

char g_ContentType[][32] = 
{
	"text/plain",
	"text/html",
	"text/xml"
};

CResponse::CResponse()
{
	SetStatusCode(C404);
	SetContentType(contenttype_PlainText);
	SetResponseContent(NULL, 0);
}

CResponse::~CResponse()
{
}

void CResponse::SetStatusCode(eStatusCode code)
{
	StatusCode = code;
}

void CResponse::SetContentType(std::string & ContentType)
{
	this->ContentType = ContentType;
}

void CResponse::SetContentType(eContentType ContentType)
{
	this->ContentType = g_ContentType[ContentType];
}

void CResponse::SetResponseContent(const char * pData, unsigned int length)
{
	ResponseContent = pData;
	ContentLength = length;
}

const char * CResponse::GetStatusPhrase()
{
	return g_ResponseCode[StatusCode].phrase;
}

int CResponse::GetStatusNumber()
{
	return g_ResponseCode[StatusCode].code;
}
unsigned int CResponse::GetContentLength()
{
	return ContentLength;
}
const char * CResponse::GetContentType()
{
	return ContentType.c_str();
}

const char * CResponse::GetContentData()
{
	return ResponseContent;
}